package com.srs.util;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import com.srs.action.agent.AgentAction;
import com.srs.dao.UserDao;
import com.srs.dao.agent.ChangeServingCellDao;
import com.srs.dao.agent.LowCsrDao;
import com.srs.dao.agent.NoActivityDao;
import com.srs.dao.agent.NoCallGeneratedDao;
import com.srs.dao.agent.UseWeakRxDao;
import com.srs.dao.agent.UseWeakRxQualityDao;
import com.srs.dao.info.AgentPercentDao;
import com.srs.dao.info.CsrPercentDao;
import com.srs.dao.info.GrxPercentDao;
import com.srs.dao.info.GrxQualityPercentDao;
import com.srs.model.User;

public class MailThread implements Runnable {

	private MailUtil mailUtil;
	
	public MailThread(MailUtil mailUtil) {
		// TODO Auto-generated constructor stub
		this.mailUtil = mailUtil;
	}
	
	@Override
	public void run() {
		
		while(true){
//			System.out.println("Listen to send mail!");
			Date now = new Date();
			String curentTime = now.getHours() + ":" + now.getMinutes() + ":" + now.getSeconds();
			mailUtil.getConfig();
			if (curentTime.equalsIgnoreCase(mailUtil.getSendTime())){
//			if (now.getSeconds() % 10 == 0){
				// Init sessionFactory
				SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
				HibernateUtil.setSessionFactory(sessionFactory);

				// Get list params
				UserDao userDao = new UserDao();
				List<User> users = userDao.listOpReceiveDailyReport();
				String[] emails = new String[users.size()];
				for(int i=0; i<users.size(); i++){
					emails[i] = users.get(i).getEmail();
				}
				
				// Get info agent
				DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");		
				String toDate = dateFormat.format(new Date(new java.util.Date().getTime() - 1000*60*60*24));
				AgentPercentDao agentPercentDao = new AgentPercentDao();
				GrxPercentDao grxPercentDao = new GrxPercentDao();
				GrxQualityPercentDao grxQualityPercentDao = new GrxQualityPercentDao() ;
				CsrPercentDao csrPercentDao = new CsrPercentDao();

				AgentAction agentAction = new AgentAction(); 
				
				// Get AgentInfo
				agentAction.setAgentPercents(agentPercentDao.list(toDate));
				agentAction.setGrxPercents(grxPercentDao.list(toDate));
				agentAction.setGrxQualityPercents(grxQualityPercentDao.list(toDate));
				agentAction.setCsrPercents(csrPercentDao.list(toDate));
				if (agentAction.getAgentPercents()!=null){
					agentAction.setAgentPercent();
				}		
				if (agentAction.getGrxPercents()!=null){
					agentAction.setGrxPercent();
				}
				if (agentAction.getGrxQualityPercents()!=null){
					agentAction.setGrxQualityPercent();
				}
				if (agentAction.getCsrPercents()!=null){
					agentAction.setCsrPercent();
				}
				
				NoActivityDao noActivityDao = new NoActivityDao();
				NoCallGeneratedDao noCallGeneratedDao = new NoCallGeneratedDao();
				ChangeServingCellDao changeServingCellDao = new ChangeServingCellDao();
				UseWeakRxDao useWeakRxDao = new UseWeakRxDao();
				UseWeakRxQualityDao useWeakRxQualityDao = new UseWeakRxQualityDao();
				LowCsrDao lowCsrDao = new LowCsrDao();
				agentAction.setAgentNoActivityNumber(noActivityDao.count(toDate).intValue());
				agentAction.setAgentNoCallGeneratedNumber(noCallGeneratedDao.count(toDate).intValue());
				agentAction.setAgentChangeServingCellNumber(changeServingCellDao.count(toDate).intValue());
				agentAction.setAgentUseWeakRxNumber(useWeakRxDao.count(toDate).intValue());
				agentAction.setAgentUseWeakRxQualityNumber(useWeakRxQualityDao.count(toDate).intValue());
				agentAction.setAgentLowCsrNumber(lowCsrDao.count(toDate).intValue());				
				String message = "<div style=\"width: 740px;margin-top: 80px;\"><div style=\"width: 370px;float: left;\">"+
					"<table class=\"tbl_info\">"+
						"<tr><td class=\"hed\" colspan=\"2\">THÔNG TIN THUÊ BAO TÍNH ĐẾN NGÀY " + toDate + "</td></tr>"+
						"<tr><td>Phần trăm thuê bao đang hoạt động</td>"+
							"<td>" +  agentAction.getAgentPercent().getPercentAgentsActivityStr() + "%</td>"+
						"</tr>"+
						"<tr><td>Phần trăm thuê bao phát sinh cuộc gọi</td>"+
							"<td>" + agentAction.getAgentPercent().getPercentAgentsCallGeneratedStr()  + "%</td>"+
						"</tr>"+
						"<tr><td>Phần trăm thuê bao phát sinh nhiều cuộc gọi</td>"+
							"<td>" + agentAction.getAgentPercent().getPercentAgentsCallGeneratedMoreStr() + "%</td>"+
						"</tr>"+
						"<tr><td>Phần trăm thuê bao thay đổi serving cell</td>"+
							"<td>" + agentAction.getAgentPercent().getPercentAgentsChangeServingCellStr() + "%</td>"+
						"</tr>"+
						"<tr><td>Phần trăm thuê bao activated mới</td>"+
							"<td>" + agentAction.getAgentPercent().getPercentAgentsNewActiveStr() + "%</td>"+
						"</tr>"+
						"<tr><td>Phần trăm thuê bao activate mới phát sinh cuộc gọi </td>"+
							"<td>" + agentAction.getAgentPercent().getPercentAgentsNewCallGeneratedStr() + "%</td>"+
						"</tr>"+
						"<tr><td>Phần trăm số mẫu có cường độ sóng tốt  </td>"+
							"<td>" + agentAction.getGrxPercent().getPercentSamplesGoodStr() + "%</td>"+
						"</tr>"+																								
						"<tr><td>Phần trăm số mẫu có chất lượng sóng tốt </td>"+
							"<td>" + agentAction.getGrxQualityPercent().getPercentSamplesGoodStr() + "%</td>"+
						"</tr>"+									
						"<tr><td>Phần trăm CSR (tỉ lệ cuộc gọi thành công)</td>"+
							"<td>" + agentAction.getCsrPercent().getPercentCallSucceededStr() + "%</td>"+
						"</tr>"+													
					"</table>"+
				"</div>"+
				"<div style=\"width: 370px;float: right;\">"+
					"<table class=\"tbl_info\">"+
						"<tr><td class=\"hed\" colspan=\"2\">CÁC CẢNH BÁO TÍNH ĐẾN NGÀY " + toDate + "</td></tr>"+
						"<tr><td>Số luợng thuê bao không hoạt động</td>"+
							"<td>" + agentAction.getAgentNoActivityNumber() + "</td>"+
						"</tr>"+
						"<tr><td>Số thuê bao đang hoạt động không phát sinh cuộc gọi</td>"+
							"<td>" + agentAction.getAgentNoCallGeneratedNumber() + "</td>"+
						"</tr>"+
						"<tr><td>Số thuê bao thay đổi serving cell</td>"+
							"<td>" + agentAction.getAgentChangeServingCellNumber() + "</td>"+
						"</tr>"+
						"<tr><td>Số thuê bao sử dụng sóng yếu</td>"+
							"<td>" + agentAction.getAgentUseWeakRxNumber() + "</td>"+
						"</tr>"+
						"<tr><td>Số thuê bao có tỉ lệ CSR thấp</td>"+
							"<td>" + agentAction.getAgentLowCsrNumber() + "</td>"+
						"</tr>"+									
						"<tr><td>Số thuê bao sử dụng sóng chất lượng tồi</td>"+
							"<td>" + agentAction.getAgentUseWeakRxQualityNumber() + "</td>"+
						"</tr>"+													
					"</table>"+
				"</div></div>";
				
				mailUtil.postMail(emails, message);
			}
		}
	}

	/**
	 * @return the mailUtil
	 */
	public MailUtil getMailUtil() {
		return mailUtil;
	}

	/**
	 * @param mailUtil the mailUtil to set
	 */
	public void setMailUtil(MailUtil mailUtil) {
		this.mailUtil = mailUtil;
	}

}
